Participant info

| Children |
17 |
11.32 |
0.8799 |
8 |
| Adolescents |
29 |
15.37 |
1.518 |
14 |
| Adults |
46 |
22.11 |
2.36 |
25 |
Agency task: Machine selection
Model: Optimal machine choices across trials by condition and
age
## Mixed Model Anova Table (Type 3 tests, LRT-method)
##
## Model: stage_2_acc ~ condition * zTrialOfCond * (zAge) + (condition *
## Model: zTrialOfCond | subID)
## Data: banditTask.filtered
## Df full model: 18
## Effect df Chisq p.value
## 1 condition 1 20.86 *** <.001
## 2 zTrialOfCond 1 60.59 *** <.001
## 3 zAge 1 1.46 .227
## 4 condition:zTrialOfCond 1 0.08 .781
## 5 condition:zAge 1 0.21 .650
## 6 zTrialOfCond:zAge 1 1.46 .226
## 7 condition:zTrialOfCond:zAge 1 0.09 .770
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
|
Predictor
|
Log-Odds
|
SE
|
p
|
|
intercept
|
2.38
|
0.17
|
<0.001
|
|
condition
|
-0.42
|
0.08
|
<0.001
|
|
trial
|
0.71
|
0.08
|
<0.001
|
|
age
|
0.21
|
0.17
|
0.225
|
|
condition x trial
|
-0.02
|
0.07
|
0.787
|
|
condition x age
|
-0.03
|
0.07
|
0.647
|
|
trial x age
|
0.10
|
0.08
|
0.223
|
|
condition x trial x age
|
0.02
|
0.06
|
0.763
|
Plot: Proportion optimal machine selections across age groups and
trials

Agency task: Agency decisions
Model: Agency decisions by VoC
## Mixed Model Anova Table (Type 3 tests, LRT-method)
##
## Model: agency ~ zVoC * zTrialOfCond * zAge + (zVoC * zTrialOfCond |
## Model: subID)
## Data: banditTask
## Df full model: 18
## Effect df Chisq p.value
## 1 zVoC 1 144.39 *** <.001
## 2 zTrialOfCond 1 3.56 + .059
## 3 zAge 1 0.01 .906
## 4 zVoC:zTrialOfCond 1 50.21 *** <.001
## 5 zVoC:zAge 1 4.17 * .041
## 6 zTrialOfCond:zAge 1 2.53 .111
## 7 zVoC:zTrialOfCond:zAge 1 9.59 ** .002
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
|
Predictor
|
Log-Odds
|
SE
|
p
|
|
intercept
|
0.74
|
0.14
|
<0.001
|
|
VoC
|
1.42
|
0.07
|
<0.001
|
|
trial
|
0.10
|
0.05
|
0.059
|
|
age
|
-0.02
|
0.14
|
0.906
|
|
VoC x trial
|
0.33
|
0.04
|
<0.001
|
|
VoC x age
|
0.15
|
0.07
|
0.038
|
|
trial x age
|
-0.09
|
0.05
|
0.108
|
|
VoC x trial x age
|
0.12
|
0.04
|
0.001
|
Model: Agency decisions when VoC = 0
## Mixed Model Anova Table (Type 3 tests, LRT-method)
##
## Model: agency ~ zAge + (1 | subID)
## Data: banditTask.vocZeroTrials
## Df full model: 3
## Effect df Chisq p.value
## 1 zAge 1 0.00 .961
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
## Generalized linear mixed model fit by maximum likelihood (Laplace
## Approximation) [glmerMod]
## Family: binomial ( logit )
## Formula: agency ~ zAge + (1 | subID)
## Data: data
## Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 1e+06))
##
## AIC BIC logLik deviance df.resid
## 4304.7 4323.7 -2149.4 4298.7 4137
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -4.2769 -0.6929 0.3759 0.6286 2.1169
##
## Random effects:
## Groups Name Variance Std.Dev.
## subID (Intercept) 1.24 1.113
## Number of obs: 4140, groups: subID, 92
##
## Fixed effects:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.246212 0.124404 10.017 <2e-16 ***
## zAge -0.006025 0.123891 -0.049 0.961
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr)
## zAge -0.002
Plot: Sensitivity to the value of choice

Plot: Sensitivity to value of control with continuous age


Summary stats: Sensitivity to value of control
Agency decision reaction times
Model: Agency RTs by VoC
## Mixed Model Anova Table (Type 3 tests, S-method)
##
## Model: agencyLogRT ~ zAge * zAbsVoC * zTrialOfCond + (zAbsVoC * zTrialOfCond |
## Model: subID)
## Data: banditTask.RT.data
## Effect df F p.value
## 1 zAge 1, 89.98 4.14 * .045
## 2 zAbsVoC 1, 90.30 16.96 *** <.001
## 3 zTrialOfCond 1, 89.36 83.83 *** <.001
## 4 zAge:zAbsVoC 1, 90.86 1.16 .285
## 5 zAge:zTrialOfCond 1, 89.48 0.48 .490
## 6 zAbsVoC:zTrialOfCond 1, 449.77 1.96 .162
## 7 zAge:zAbsVoC:zTrialOfCond 1, 455.28 0.01 .931
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
|
Predictor
|
Estimates
|
SE
|
p
|
|
intercept
|
0.15
|
0.04
|
<0.001
|
|
age
|
-0.08
|
0.04
|
0.042
|
|
VoC magnitude
|
-0.02
|
0.01
|
<0.001
|
|
trial
|
-0.13
|
0.01
|
<0.001
|
|
age x VoC magnitude
|
-0.01
|
0.01
|
0.282
|
|
age x trial
|
0.01
|
0.01
|
0.489
|
|
VoC magnitude x trial
|
-0.00
|
0.00
|
0.161
|
|
age x VoC magnitude x trial
|
0.00
|
0.00
|
0.931
|
Plot: Agency RTs by VoC

Choice preference task
Choice preference task: summary stats
Model: Choice preference task accuracy
## Mixed Model Anova Table (Type 3 tests, LRT-method)
##
## Model: correct ~ zDiff * zAge + (zDiff | subID)
## Data: rewardSense.filtered
## Df full model: 7
## Effect df Chisq p.value
## 1 zDiff 1 79.85 *** <.001
## 2 zAge 1 0.78 .376
## 3 zDiff:zAge 1 1.36 .244
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
Explicit reward knowledge task
Explicit reward knowledge task: summary stats
Model: Explicit reward knowledge by age and true probabilities
## Mixed Model Anova Table (Type 3 tests, S-method)
##
## Model: error ~ zTrueProb * zAge + (1 | subID)
## Data: explicitKnow.filtered
## Effect df F p.value
## 1 zTrueProb 1, 456.86 21.67 *** <.001
## 2 zAge 1, 89.88 0.04 .845
## 3 zTrueProb:zAge 1, 456.86 0.36 .548
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
Plot: Explicit reward knowledge

LS0tCnRpdGxlOiAiVm9DIEFuYWx5c2VzIFBhcnQgMjogUmVncmVzc2lvbnMiCmRhdGU6IDMvMjcvMjQKb3V0cHV0OgogICAgaHRtbF9kb2N1bWVudDoKICAgICAgICBkZl9wcmludDogJ3BhZ2VkJwogICAgICAgIHRvYzogdHJ1ZQogICAgICAgIHRvY19mbG9hdDoKICAgICAgICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICAgICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlCiAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiBmYWxzZQogICAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgICAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQotLS0KYGBge3IgY2h1bmsgc2V0dGluZ3MsIGluY2x1ZGUgPSBGQUxTRX0KIyBzZXQgY2h1bmsgc2V0dGluZ3MKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UpCmtuaXRyOjpvcHRzX2NodW5rJHNldChkcGk9NjAwKQprbml0cjo6b3B0c19rbml0JHNldChyb290LmRpciA9IHJwcm9qcm9vdDo6ZmluZF9yc3R1ZGlvX3Jvb3RfZmlsZSgpKQpgYGAKICAgICAgICAgICAgICAgICAgICAgIApgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KCiMgbGlzdCBhbGwgcGFja2FnZXMgcmVxdWlyZWQgZm9yIHRoZSBhbmFseXNpcwpsaXN0X29mX3BhY2thZ2VzIDwtIGMoInRpZHl2ZXJzZSIsICJhZmV4IiwgInBhbmRlciIsICJzalBsb3QiKQoKIyBsb2FkIGFsbCBwYWNrYWdlcyAKbGFwcGx5KGxpc3Rfb2ZfcGFja2FnZXMsIGxpYnJhcnksIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkKCiMgYWRkIHRoZW1lIGZvciBwbG90dGluZwp2b2NfdGhlbWUgPC0gZnVuY3Rpb24gKCkgewogIHRoZW1lKAogICAgcGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSAidHJhbnNwYXJlbnQiLCBjb2xvcj0iZ3JheTc1IiksCiAgICBwYW5lbC5iYWNrZ3JvdW5kICA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsPSJ0cmFuc3BhcmVudCIsIGNvbG91cj1OQSksCiAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9yZWN0KGZpbGw9InRyYW5zcGFyZW50IiwgY29sb3VyPU5BKSwKICAgIGxpbmUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBheGlzLnRpY2tzID0gZWxlbWVudF9saW5lKGNvbG9yPSJncmF5NzUiKSwKICAgIHRleHQ9ZWxlbWVudF90ZXh0KGZhbWlseT0iQXZlbmlyIiksCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwKICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwKICAgIHRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNSksCiAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTEyKQogICkKfQoKY29sb3IxID0gIiMwMGI0ZDgiCmNvbG9yMiA9ICIjMDA3N2I2Igpjb2xvcjMgPSAiIzAzMDQ1ZSIKCgojei1zY29yZSBmdW5jdGlvbgpzY2FsZV90aGlzIDwtIGZ1bmN0aW9uKHgpewogICh4IC0gbWVhbih4LCBuYS5ybT1UUlVFKSkgLyBzZCh4LCBuYS5ybT1UUlVFKQp9CgpgYGAKCiMgUGFydGljaXBhbnQgaW5mbwpgYGB7ciBwYXJ0aWNpcGFudHMgcGxvdH0KCiNsb2FkIGRlbW9ncmFwaGljIGluZm8Kc3ViX2luZm8gPC0gcmVhZF9jc3YoJ2RhdGEvdm9jX3N1Yl9pbmZvLmNzdicpIAoKIyBwbG90IGhpc3RvZ3JhbSBvZiBtYWxlIGFuZCBmZW1hbGUgcGFydGljaXBhbnRzCnN1Yl9pbmZvICU+JSBtdXRhdGUod2hvbGVfYWdlID0gZmxvb3IoYWdlKSkgJT4lIAogICAgZ3JvdXBfYnkoc3ViSUQsIGdlbmRlciwgd2hvbGVfYWdlKSAlPiUgCiAgICBkaXN0aW5jdChzdWJJRCkgJT4lIAogICAgZ2dwbG90KC4sIGFlcyh4PXdob2xlX2FnZSwgZmlsbD1nZW5kZXIpKSArCiAgICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDEsIGNvbG9yPSJ3aGl0ZSIpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWU9IlNleCIsCiAgICAgICAgICAgICAgICAgICAgbGFiZWxzPWMoIkZlbWFsZSIsICJNYWxlIiksCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzPWMoY29sb3IxLCBjb2xvcjIpKSArCiAgICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gYygyLDQsNiw4LDEwKSwKICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjIiLCI0IiwiNiIsIjgiLCIxMCIpLAogICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygwLDEwKSkgKwogICAgeGxhYigiQWdlIikgKwogICAgeWxhYigiQ291bnQiKSArCiAgICB2b2NfdGhlbWUoKQpgYGAKCmBgYHtyIHBhcnRpY2lwYW50IGluZm99CgojbG9hZCBkZW1vZ3JhcGhpYyBpbmZvCnN1Yl9pbmZvIDwtIHJlYWRfY3N2KCdkYXRhL3ZvY19zdWJfaW5mby5jc3YnKSAlPiUKICAgIG11dGF0ZShhZ2VfZ3JvdXAgPSBjYXNlX3doZW4oYWdlIDwgMTMgfiAiQ2hpbGRyZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2UgPiAxMi45OSAmIGFnZSA8IDE4IH4gIkFkb2xlc2NlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlID4gMTcuOTkgfiAiQWR1bHRzIikpCgpzdWJfaW5mbyRhZ2VfZ3JvdXAgPC0gZmFjdG9yKHN1Yl9pbmZvJGFnZV9ncm91cCwgbGV2ZWxzID0gYygiQ2hpbGRyZW4iLCAiQWRvbGVzY2VudHMiLCAiQWR1bHRzIikpCgojIGFnZSBncm91cCBpbmZvcm1hdGlvbgphZ2VfZ3JvdXBfaW5mbyA8LSBzdWJfaW5mbyAlPiUKICAgIGdyb3VwX2J5KGFnZV9ncm91cCkgJT4lCiAgICBzdW1tYXJpemUoTiA9IG4oKSwgCiAgICAgICAgICAgICAgbWVhbkFnZSA9IG1lYW4oYWdlKSwKICAgICAgICAgICAgICBzZEFnZSA9IHNkKGFnZSksCiAgICAgICAgICAgICAgbkZlbWFsZSA9IHN1bShnZW5kZXIgPT0gIkYiKQogICAgICAgICAgICAgICkKCnBhbmRlcihhZ2VfZ3JvdXBfaW5mbykKYGBgCgoKIyBBZ2VuY3kgdGFzazogTWFjaGluZSBzZWxlY3Rpb24KIyMgTW9kZWw6IE9wdGltYWwgbWFjaGluZSBjaG9pY2VzIGFjcm9zcyB0cmlhbHMgYnkgY29uZGl0aW9uIGFuZCBhZ2UKYGBge3IgbWFjaGluZSBjaG9pY2VzIGFjcm9zcyB0cmlhbHMgYnkgYWdlfQoKIyBSZWFkIGluIGRhdGEKYmFuZGl0VGFzayA8LSByZWFkX2NzdignZGF0YS9wcm9jZXNzZWQvYmFuZGl0X3Rhc2suY3N2JykgCgojY29tYmluZSB3aXRoIHBhcnRpY2lwYW50IGFnZQpiYW5kaXRUYXNrIDwtIGZ1bGxfam9pbihiYW5kaXRUYXNrLCBzdWJfaW5mbywgYnkgPSBjKCJzdWJJRCIpKQoKIyBGaWx0ZXIgZGF0YSB0byBoYXZlIG9ubHkgdHJpYWxzIHdoZXJlIHBlb3BsZSBjaG9vc2UgYWdlbmN5IGFuZCBleGNsdWRlIHRyaWFscyB3aXRoIDUwLTUwIGNvbmRpdGlvbiAKYmFuZGl0VGFzay5maWx0ZXJlZCA8LSBiYW5kaXRUYXNrICU+JSAKICAgIGZpbHRlcihhZ2VuY3kgPT0gMSwgY29uZGl0aW9uIT0iYmFuZGl0czUwNTAiKQoKIyBTY2FsZSBjb250aW51b3VzIHZhcmlhYmxlcwpiYW5kaXRUYXNrLmZpbHRlcmVkJHpBZ2UgPC0gc2NhbGVfdGhpcyhiYW5kaXRUYXNrLmZpbHRlcmVkJGFnZSkKYmFuZGl0VGFzay5maWx0ZXJlZCR6VHJpYWxPZkNvbmQgPC0gc2NhbGVfdGhpcyhiYW5kaXRUYXNrLmZpbHRlcmVkJHRyaWFsT2ZDb25kKQoKIyBNaXhlZC1lZmZlY3RzIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWwKY29ycmVjdF9ieUNvbmRpdGlvblRyaWFsQWdlLm1peGVkIDwtIG1peGVkKHN0YWdlXzJfYWNjIH4gY29uZGl0aW9uKnpUcmlhbE9mQ29uZCooekFnZSkgKyAoY29uZGl0aW9uKnpUcmlhbE9mQ29uZHxzdWJJRCksIAogICAgICAgICAgICAgICAgZGF0YSA9IGJhbmRpdFRhc2suZmlsdGVyZWQsCiAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbCwgCiAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwKICAgICAgICAgICAgICAgIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIiwgb3B0Q3RybD1saXN0KG1heGZ1bj0xZTYpKSkKCiNkaXNwbGF5IG1vZGVsIHN0YXRzCmNvcnJlY3RfYnlDb25kaXRpb25UcmlhbEFnZS5taXhlZCAKYGBgCgpgYGB7ciBtYWNoaW5lIG1vZGVsIHByaW50IG1vZGVsIHN0YXRzfQoKY29ycmVjdF9ieUNvbmRpdGlvblRyaWFsQWdlLmdsbWVyIDwtIG1peGVkKHN0YWdlXzJfYWNjIH4gY29uZGl0aW9uKnpUcmlhbE9mQ29uZCooekFnZSkgKyAoY29uZGl0aW9uKnpUcmlhbE9mQ29uZHxzdWJJRCksIAogICAgICAgICAgICAgICAgZGF0YSA9IGJhbmRpdFRhc2suZmlsdGVyZWQsCiAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbCwgCiAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwKICAgICAgICAgICAgICAgIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIiwgb3B0Q3RybD1saXN0KG1heGZ1bj0xZTYpKSwgCiAgICAgICAgICAgICAgICByZXR1cm4gPSAibWVyTW9kIikKCnRhYl9tb2RlbChjb3JyZWN0X2J5Q29uZGl0aW9uVHJpYWxBZ2UuZ2xtZXIsIAogICAgICAgICAgcHJlZC5sYWJlbHMgPSBjKCJpbnRlcmNlcHQiLCAiY29uZGl0aW9uIiwgInRyaWFsIiwgImFnZSIsICJjb25kaXRpb24geCB0cmlhbCIsICJjb25kaXRpb24geCBhZ2UiLCAidHJpYWwgeCBhZ2UiLCAiY29uZGl0aW9uIHggdHJpYWwgeCBhZ2UiKSwKICAgICAgICAgIHRyYW5zZm9ybSA9IE5VTEwsCiAgICAgICAgICBzaG93LmVzdCA9IFQsIAogICAgICAgICAgc2hvdy5zZSA9IFQsIAogICAgICAgICAgc2hvdy5zdGF0ID0gRiwKICAgICAgICAgIHNob3cuY2kgPSBGLAogICAgICAgICAgc2hvdy5yZS52YXIgPSBGLAogICAgICAgICAgc2hvdy5pY2MgPSBGLAogICAgICAgICAgc2hvdy5uZ3JvdXBzID0gRiwKICAgICAgICAgIHNob3cub2JzID0gRiwKICAgICAgICAgIHNob3cucjIgPSBGLAogICAgICAgICAgc3RyaW5nLnNlID0gIlNFIiwKICAgICAgICAgIGVtcGgucCA9IEYsCiAgICAgICAgICBzdHJpbmcucHJlZCA9ICJQcmVkaWN0b3IiLAogICAgICAgICAgdGl0bGUgPSAiIiwKICAgICAgICAgIGR2LmxhYmVscyA9ICIiKQpgYGAKCiMjIFBsb3Q6IFByb3BvcnRpb24gb3B0aW1hbCBtYWNoaW5lIHNlbGVjdGlvbnMgYWNyb3NzIGFnZSBncm91cHMgYW5kIHRyaWFscwpgYGB7ciBwbG90IGJhbmRpdCBjaG9pY2VzIGFjcm9zcyB0cmlhbHMsIHdpZHRoID0gNywgaGVpZ2h0ID0gNCwgdW5pdCA9ICJpbiJ9CgpiYW5kaXRUYXNrU3ViTWVhbnMgPC0gYmFuZGl0VGFzayAlPiUKICAgIG11dGF0ZShibG9jayA9IGZsb29yKCh0cmlhbC0xKS8yMSkgKyAxKSAlPiUKICAgIGZpbHRlcihhZ2VuY3k9PTEsIGNvbmRpdGlvbiE9ImJhbmRpdHM1MDUwIikgJT4lIAogICAgZ3JvdXBfYnkoY29uZGl0aW9uLCBibG9jaywgYWdlX2dyb3VwLCBzdWJJRCkgJT4lIAogICAgc3VtbWFyaXplKHBjdENvcnJlY3QgPSBtZWFuKHN0YWdlXzJfYWNjKSkKCmJhbmRpdFRhc2tNZWFucyA8LSBiYW5kaXRUYXNrU3ViTWVhbnMgJT4lCiAgICBncm91cF9ieShjb25kaXRpb24sIGJsb2NrLCBhZ2VfZ3JvdXApICU+JSAKICAgIHN1bW1hcml6ZShwY3RDb3JyID0gbWVhbihwY3RDb3JyZWN0KSwKICAgICAgICAgICAgICBzZSA9IHNkKHBjdENvcnJlY3QpL3NxcnQobigpKSkKCm1hY2hpbmVTZWxlY3Rpb25QbG90IDwtIGdncGxvdChiYW5kaXRUYXNrTWVhbnMsIGFlcyh4PWJsb2NrLCB5PXBjdENvcnIsIGNvbG9yPWNvbmRpdGlvbikpICsKICAgIGZhY2V0X3dyYXAofmFnZV9ncm91cCkgKwogICAgZ2VvbV9wb2ludChzaXplID0gMykgKwogICAgZ2VvbV9qaXR0ZXIoZGF0YSA9IGJhbmRpdFRhc2tTdWJNZWFucywgIGFlcyh4ID0gYmxvY2ssIHkgPSBwY3RDb3JyZWN0LCBjb2xvcj1jb25kaXRpb24pLCBzaXplID0gLjUpICsKICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGFlcyhmaWxsID0gY29uZGl0aW9uKSkgKwogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLjUsIGxpbmV0eXBlPSJkYXNoZWQiKSArCiAgICB5bGFiKCJQcm9wb3J0aW9uIE9wdGltYWwgTWFjaGluZSBTZWxlY3Rpb25zIikgKwogICAgeGxhYigiQmxvY2siKSArCiAgICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYyg0LCA4LCAxMikpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWU9IkNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM9YygiNzAvMzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkwLzEwIiksCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9Yyhjb2xvcjEsIGNvbG9yMyksIAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9sZWdlbmQocmV2ZXJzZT1UUlVFKSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWU9IkNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM9YygiNzAvMzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkwLzEwIiksCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9Yyhjb2xvcjEsIGNvbG9yMyksCiAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHJldmVyc2U9VFJVRSkpICsKICAgIHZvY190aGVtZSgpICsKICAgIHRoZW1lKHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xMikpCm1hY2hpbmVTZWxlY3Rpb25QbG90CmBgYAoKCiMgQWdlbmN5IHRhc2s6IEFnZW5jeSBkZWNpc2lvbnMgCiMjIE1vZGVsOiBBZ2VuY3kgZGVjaXNpb25zIGJ5IFZvQwpgYGB7ciB2b2MgbW9kZWx9Cgojc2NhbGUgdmFyaWFibGVzCmJhbmRpdFRhc2skelZvQyA8LSBzY2FsZV90aGlzKGJhbmRpdFRhc2skdm9jKQpiYW5kaXRUYXNrJHpUcmlhbE9mQ29uZCA8LSBzY2FsZV90aGlzKGJhbmRpdFRhc2skdHJpYWxPZkNvbmQpCmJhbmRpdFRhc2skekFnZSA8LSBzY2FsZV90aGlzKGJhbmRpdFRhc2skYWdlKQoKIyBwcmVkaWN0IGFnZW5jeSBjaG9pY2UgZnJvbSB1dGlsaXR5IG9mIGNvbnRyb2wsIHRyaWFsLCBsaW5lYXIgYWdlCmFnZW5jeV9ieVZPQ1RyaWFsQWdlLm1peGVkID0gbWl4ZWQoYWdlbmN5IH4gelZvQyAqIHpUcmlhbE9mQ29uZCAqIHpBZ2UgKyAoelZvQyAqIHpUcmlhbE9mQ29uZHxzdWJJRCksIAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYmFuZGl0VGFzaywgCiAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsLCAKICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIkxSVCIsIGNvbnRyb2w9Z2xtZXJDb250cm9sKG9wdGltaXplcj0iYm9ieXFhIixvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpKSAKCiNkaXNwbGF5IHN0YXRzCmFnZW5jeV9ieVZPQ1RyaWFsQWdlLm1peGVkCmBgYAoKYGBge3IgYWdlbmN5IG1vZGVsIHByaW50IG1vZGVsIHN0YXRzfQoKYWdlbmN5X2J5Vk9DVHJpYWxBZ2UuZ2xtZXIgPSBtaXhlZChhZ2VuY3kgfiB6Vm9DICogelRyaWFsT2ZDb25kICogekFnZSArICh6Vm9DICogelRyaWFsT2ZDb25kfHN1YklEKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiYW5kaXRUYXNrLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwsIAogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKSAKCnRhYl9tb2RlbChhZ2VuY3lfYnlWT0NUcmlhbEFnZS5nbG1lciwgCiAgICAgICAgICBwcmVkLmxhYmVscyA9IGMoImludGVyY2VwdCIsICJWb0MiLCAidHJpYWwiLCAiYWdlIiwgIlZvQyB4IHRyaWFsIiwgIlZvQyB4IGFnZSIsICJ0cmlhbCB4IGFnZSIsICJWb0MgeCB0cmlhbCB4IGFnZSIpLAogICAgICAgICAgdHJhbnNmb3JtID0gTlVMTCwKICAgICAgICAgIHNob3cuZXN0ID0gVCwgCiAgICAgICAgICBzaG93LnNlID0gVCwgCiAgICAgICAgICBzaG93LnN0YXQgPSBGLAogICAgICAgICAgc2hvdy5jaSA9IEYsCiAgICAgICAgICBzaG93LnJlLnZhciA9IEYsCiAgICAgICAgICBzaG93LmljYyA9IEYsCiAgICAgICAgICBzaG93Lm5ncm91cHMgPSBGLAogICAgICAgICAgc2hvdy5vYnMgPSBGLAogICAgICAgICAgc2hvdy5yMiA9IEYsCiAgICAgICAgICBzdHJpbmcuc2UgPSAiU0UiLAogICAgICAgICAgZW1waC5wID0gRiwKICAgICAgICAgIHN0cmluZy5wcmVkID0gIlByZWRpY3RvciIsCiAgICAgICAgICB0aXRsZSA9ICIiLAogICAgICAgICAgZHYubGFiZWxzID0gIiIpCmBgYAoKIyMgTW9kZWw6IEFnZW5jeSBkZWNpc2lvbnMgd2hlbiBWb0MgPSAwCmBgYHtyIHZvYyAwIG1vZGVsfQoKI2ZpbHRlciBkYXRhCmJhbmRpdFRhc2sudm9jWmVyb1RyaWFscyA8LSBiYW5kaXRUYXNrICU+JQogICAgZmlsdGVyKHZvYyA9PSAwKQoKI3NjYWxlIGFnZQpiYW5kaXRUYXNrLnZvY1plcm9UcmlhbHMkekFnZSA8LSBzY2FsZShiYW5kaXRUYXNrLnZvY1plcm9UcmlhbHMkYWdlKQoKIyBwcmVkaWN0IGFnZW5jeSBjaG9pY2UgZnJvbSB1dGlsaXR5IG9mIGNvbnRyb2wsIHRyaWFsLCBsaW5lYXIgYWdlCmFnZW5jeV92b2NaZXJvX2J5QWdlLm1peGVkID0gbWl4ZWQoYWdlbmN5IH4gIHpBZ2UgKyAoMXxzdWJJRCksIAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYmFuZGl0VGFzay52b2NaZXJvVHJpYWxzLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwsIAogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLCBvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpKSAKCiNkaXNwbGF5IHN0YXRzCmFnZW5jeV92b2NaZXJvX2J5QWdlLm1peGVkCnN1bW1hcnkoYWdlbmN5X3ZvY1plcm9fYnlBZ2UubWl4ZWQpCmBgYAoKCiMjIFBsb3Q6IFNlbnNpdGl2aXR5IHRvIHRoZSB2YWx1ZSBvZiBjaG9pY2UKYGBge3Igdm9jIHBsb3QsIGZpZy5oZWlnaHQgPSA0LCBmaWcud2lkdGggPSA3LCB1bml0ID0gImluIn0KClZvQ19wbG90X3N1Yl9tZWFucyA8LSBiYW5kaXRUYXNrICU+JSAKICAgIG11dGF0ZSh0YXNrSGFsZiA9IGNhc2Vfd2hlbih0cmlhbCA8IDE1OCB+ICJGaXJzdCBIYWxmIG9mIFRhc2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWFsID4gMTU3IH4gIlNlY29uZCBIYWxmIG9mIFRhc2siKSkgJT4lCiAgICBncm91cF9ieShhZ2VfZ3JvdXAsIHRhc2tIYWxmLCB2b2MsIHN1YklEKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuU3ViQWdlbmN5ID0gbWVhbihhZ2VuY3ksIG5hLnJtID0gVCkpCgpWb0NfcGxvdF9tZWFucyA8LSBWb0NfcGxvdF9zdWJfbWVhbnMgJT4lIAogICAgZ3JvdXBfYnkoYWdlX2dyb3VwLCB0YXNrSGFsZiwgdm9jKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuQWdlbmN5ID0gbWVhbihtZWFuU3ViQWdlbmN5LCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIHNlQWdlbmN5ID0gc2QobWVhblN1YkFnZW5jeSAvIHNxcnQobigpKSkpCgojcGxvdApWb0NfcGxvdCA8LSBnZ3Bsb3QoVm9DX3Bsb3RfbWVhbnMsIGFlcyh4ID0gdm9jLCB5ID0gbWVhbkFnZW5jeSwgY29sb3IgPSBhZ2VfZ3JvdXApKSArCiAgICBmYWNldF93cmFwKH50YXNrSGFsZikgKwogICAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBhZ2VfZ3JvdXApKSArIAogICAgZ2VvbV9lcnJvcmJhcihhZXMoY29sb3IgPSBhZ2VfZ3JvdXAsIHltaW4gPSBtZWFuQWdlbmN5IC0gc2VBZ2VuY3ksIHltYXggPSBtZWFuQWdlbmN5ICsgc2VBZ2VuY3kpLCB3aWR0aCA9IC4xKSArIAogICAgZ2VvbV9saW5lKGFlcyhncm91cCA9IGFnZV9ncm91cCkpICsKICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygiIzcwMjk2MyIsICIjYzAwMDAwIiwgIiNmZmFlNDIiKSwgbmFtZSA9ICJBZ2UgR3JvdXAiKSArCiAgICB4bGFiKCJWYWx1ZSBvZiBDaG9pY2UgKFZvQykiKSArCiAgICB5bGFiKCJQcm9wb3J0aW9uIEFnZW5jeSBDaG9pY2VzIikgKwogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLjUsIGxpbmV0eXBlID0gImRhc2hlZCIpICsKICAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGxpbmV0eXBlID0gImRhc2hlZCIpICsKICAgIHZvY190aGVtZSgpClZvQ19wbG90CmBgYAoKIyMgUGxvdDogU2Vuc2l0aXZpdHkgdG8gdmFsdWUgb2YgY29udHJvbCB3aXRoIGNvbnRpbnVvdXMgYWdlIApgYGB7ciB2b2MgcGxvdCBjb250aW51b3VzIGFnZSwgZmlnLmhlaWdodCA9IDMuOSwgZmlnLndpZHRoID0gMywgdW5pdCA9ICJpbiJ9CgojcnVuIG1vZGVsIHdpdGhvdXQgYWdlIHRvIGdldCByYW5kb20gZWZmZWN0cyBmb3IgZWFjaCBwYXJ0aWNpcGFudAphZ2VuY3lfYnlWT0NUcmlhbC5nbG1lciA9IG1peGVkKGFnZW5jeSB+IHpWb0MgKiB6VHJpYWxPZkNvbmQgKyAoelZvQyAqIHpUcmlhbE9mQ29uZCB8IHN1YklEKSwgCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiYW5kaXRUYXNrLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwsIAogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIiwgY29udHJvbD1nbG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKSAKCiNnZXQgZml4ZWQgZWZmZWN0IG9mIHpWb0MKVm9DX2ZpeGVkZWZmIDwtIGFzLmRhdGEuZnJhbWUoY29lZihzdW1tYXJ5KGFnZW5jeV9ieVZPQ1RyaWFsLmdsbWVyKSkpJEVzdGltYXRlWzJdClZvQ19pbnRfZml4ZWRlZmYgPC0gYXMuZGF0YS5mcmFtZShjb2VmKHN1bW1hcnkoYWdlbmN5X2J5Vk9DVHJpYWwuZ2xtZXIpKSkkRXN0aW1hdGVbNF0KCiNnZXQgcmFuZG9tIGVmZmVjdHMKVm9DX2VmZmVjdHMgPC0gcmFuZWYoYWdlbmN5X2J5Vk9DVHJpYWwuZ2xtZXIpJHN1YklEICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJJRCIpCgojY29tYmluZSB3aXRoIGFnZQpWb0Nfc3ViRWZmZWN0cyA8LSBiYW5kaXRUYXNrICU+JQogICAgc2VsZWN0KHN1YklELCBhZ2UpICU+JSAKICAgIHVuaXF1ZSgpICU+JQogICAgbGVmdF9qb2luKFZvQ19lZmZlY3RzLCBieSA9IGMoInN1YklEIikpICU+JQogICAgbXV0YXRlKHpWb0NGdWxsID0gelZvQyArIFZvQ19maXhlZGVmZiwgCiAgICAgICAgICAgaW50RnVsbCA9IGB6Vm9DOnpUcmlhbE9mQ29uZGAgKyBWb0NfaW50X2ZpeGVkZWZmKQoKI3Bsb3QgYWdlIGJ5IFZvQyBlZmZlY3QKVm9DX3Bsb3RfY29udGludW91c0FnZSA8LSBnZ3Bsb3QoVm9DX3N1YkVmZmVjdHMsIGFlcyh4ID0gYWdlLCB5ID0gelZvQ0Z1bGwpKSArCiAgICBnZW9tX3BvaW50KGNvbG9yID0gImJsYWNrIikgKyAKICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICJibGFjayIpICsKICAgIHZvY190aGVtZSgpICsgCiAgICB4bGFiKCJBZ2UiKSArCiAgICB5bGFiKCJWb0MgRWZmZWN0IikgClZvQ19wbG90X2NvbnRpbnVvdXNBZ2UKCiNwbG90IGFnZSBieSBWb0MgeCB0cmlhbCBlZmZlY3QKVm9DX3Bsb3RfY29udGludW91c0FnZVRyaWFsIDwtIGdncGxvdChWb0Nfc3ViRWZmZWN0cywgYWVzKHggPSBhZ2UsIHkgPSBpbnRGdWxsKSkgKwogICAgZ2VvbV9wb2ludChjb2xvciA9ICJibGFjayIpICsgCiAgICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiYmxhY2siKSArCiAgICB2b2NfdGhlbWUoKSArIAogICAgeGxhYigiQWdlIikgKwogICAgeWxhYigiVm9DIHggVHJpYWwgRWZmZWN0IikgClZvQ19wbG90X2NvbnRpbnVvdXNBZ2VUcmlhbApgYGAKCgojIyBTdW1tYXJ5IHN0YXRzOiBTZW5zaXRpdml0eSB0byB2YWx1ZSBvZiBjb250cm9sCmBgYHtyIHZvYyBzdW1tYXJ5IHN0YXRzfQoKIyBXaGF0IHByb3BvcnRpb24gb2YgdHJpYWxzIGRpZCBwYXJ0aWNpcGFudHMgY2hvb3NlIGFnZW5jeSB3aGVuIFZvQyB3YXMgMD8KVm9DX3plcm9fbWVhbnNfc3ViIDwtIGJhbmRpdFRhc2sgJT4lIAogICAgZmlsdGVyKHZvYyA9PSAwKSAlPiUKICAgIGdyb3VwX2J5KHN1YklELCBhZ2VfZ3JvdXApICU+JQogICAgc3VtbWFyaXplKG1lYW5TdWJBZ2VuY3kgPSBtZWFuKGFnZW5jeSwgbmEucm0gPSBUKSkKClZvQ196ZXJvX21lYW5zIDwtIFZvQ196ZXJvX21lYW5zX3N1YiAlPiUKICAgIHN1bW1hcml6ZShtZWFuQWdlbmN5ID0gbWVhbihtZWFuU3ViQWdlbmN5LCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIHNlQWdlbmN5ID0gc2QobWVhblN1YkFnZW5jeSAvIHNxcnQobigpKSkpClZvQ196ZXJvX21lYW5zCmBgYAoKCiMjIEFnZW5jeSBkZWNpc2lvbiByZWFjdGlvbiB0aW1lcwpgYGB7ciBhZ2VuY3kgUlQgZGF0YSBwcm9jZXNzaW5nfQoKI2hvdyBtYW55IFJUcyBmYXN0ZXIgdGhhbiAxMDAgbXM/CmZhc3RSVHMgPC0gYmFuZGl0VGFzayAlPiUKICAgIGZpbHRlcihhZ2VuY3lSVCA8IC4xKSAlPiUKICAgIG5yb3coKQoKIzQ4NiBvdXQgb2YgMjg5ODAgdHJpYWxzICgxLjclKSBvZiBhZ2VuY3kgUlRzIGFyZSBmYXN0IC0gZXhjbHVkZQoKc2xvd1JUcyA8LSBiYW5kaXRUYXNrICU+JQogICAgZmlsdGVyKGFnZW5jeVJUID4gMzApICU+JQogICAgbnJvdygpCgojMTQgb3V0IG9mIDI4OTgwIHRyaWFscyAoPCAxJSkgb2YgYWdlbmN5IFJUcyBhcmUgdmVyeSBzbG93IC0gZXhjbHVkZQoKYmFuZGl0VGFzay5SVC5kYXRhIDwtIGJhbmRpdFRhc2sgJT4lCiAgICBmaWx0ZXIoYWdlbmN5UlQgPiAuMSkgJT4lCiAgICBmaWx0ZXIoYWdlbmN5UlQgPCAzMCkgJT4lCiAgICBtdXRhdGUoYWdlbmN5TG9nUlQgPSBsb2coYWdlbmN5UlQpKQpgYGAKCiMjIE1vZGVsOiBBZ2VuY3kgUlRzIGJ5IFZvQwpgYGB7ciB2b2MgUlQgbW9kZWx9CgojY29tcHV0ZSBhYnModm9jKSB2YXJpYWJsZQpiYW5kaXRUYXNrLlJULmRhdGEkYWJzVm9DIDwtIGFicyhiYW5kaXRUYXNrLlJULmRhdGEkdm9jKQoKI3NjYWxlIHZhcmlhYmxlcwpiYW5kaXRUYXNrLlJULmRhdGEkekFnZSA8LSBzY2FsZShiYW5kaXRUYXNrLlJULmRhdGEkYWdlKQpiYW5kaXRUYXNrLlJULmRhdGEkelZvQyA8LSBzY2FsZShiYW5kaXRUYXNrLlJULmRhdGEkdm9jKQpiYW5kaXRUYXNrLlJULmRhdGEkekFic1ZvQyA8LSBzY2FsZShiYW5kaXRUYXNrLlJULmRhdGEkYWJzVm9DKQpiYW5kaXRUYXNrLlJULmRhdGEkelRyaWFsT2ZDb25kIDwtIHNjYWxlKGJhbmRpdFRhc2suUlQuZGF0YSR0cmlhbE9mQ29uZCkKCmFnZW5jeS5SVC5tb2RlbCA8LSBtaXhlZChhZ2VuY3lMb2dSVCB+IHpBZ2UgKiB6QWJzVm9DICogelRyaWFsT2ZDb25kICsgKHpBYnNWb0MgKiB6VHJpYWxPZkNvbmQgfCBzdWJJRCksCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gYmFuZGl0VGFzay5SVC5kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9bG1lckNvbnRyb2wob3B0aW1pemVyPSJib2J5cWEiLCBvcHRDdHJsPWxpc3QobWF4ZnVuPTFlNikpKQoKYWdlbmN5LlJULm1vZGVsCgojZWZmZWN0cyBvZgojIGFnZQojIFZvQwojIHRyaWFsIG9mIGNvbmRpdGlvbgoKI25vIGludGVyYWN0aW9ucwpgYGAKCmBgYHtyIGFnZW5jeSBSVHMgcHJpbnQgbW9kZWwgc3RhdHN9CmFnZW5jeS5SVC5sbWVyIDwtIG1peGVkKGFnZW5jeUxvZ1JUIH4gekFnZSAqIHpBYnNWb0MgKiB6VHJpYWxPZkNvbmQgKyAoekFic1ZvQyAqIHpUcmlhbE9mQ29uZCB8IHN1YklEKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiYW5kaXRUYXNrLlJULmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiUyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1sbWVyQ29udHJvbChvcHRpbWl6ZXI9ImJvYnlxYSIsIG9wdEN0cmw9bGlzdChtYXhmdW49MWU2KSksCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA9ICJtZXJNb2QiKQoKdGFiX21vZGVsKGFnZW5jeS5SVC5sbWVyLCAKICAgICAgICAgIHByZWQubGFiZWxzID0gYygiaW50ZXJjZXB0IiwgImFnZSIsICJWb0MgbWFnbml0dWRlIiwgInRyaWFsIiwgImFnZSB4IFZvQyBtYWduaXR1ZGUiLCAiYWdlIHggdHJpYWwiLCAiVm9DIG1hZ25pdHVkZSB4IHRyaWFsIiwgImFnZSB4IFZvQyBtYWduaXR1ZGUgeCB0cmlhbCIpLAogICAgICAgICAgdHJhbnNmb3JtID0gTlVMTCwKICAgICAgICAgIHNob3cuZXN0ID0gVCwgCiAgICAgICAgICBzaG93LnNlID0gVCwgCiAgICAgICAgICBzaG93LnN0YXQgPSBGLAogICAgICAgICAgc2hvdy5jaSA9IEYsCiAgICAgICAgICBzaG93LnJlLnZhciA9IEYsCiAgICAgICAgICBzaG93LmljYyA9IEYsCiAgICAgICAgICBzaG93Lm5ncm91cHMgPSBGLAogICAgICAgICAgc2hvdy5vYnMgPSBGLAogICAgICAgICAgc2hvdy5yMiA9IEYsCiAgICAgICAgICBzdHJpbmcuc2UgPSAiU0UiLAogICAgICAgICAgZW1waC5wID0gRiwKICAgICAgICAgIHN0cmluZy5wcmVkID0gIlByZWRpY3RvciIsCiAgICAgICAgICB0aXRsZSA9ICIiLAogICAgICAgICAgZHYubGFiZWxzID0gIiIpCmBgYAoKCiMjIFBsb3Q6IEFnZW5jeSBSVHMgYnkgVm9DCmBgYHtyIGFnZW5jeSBSVCBieSBWb0MsIGZpZy5oZWlnaHQgPSA0LCBmaWcud2lkdGggPSA4LCB1bml0cyA9ICJpbiJ9CgphZ2VuY3lSVC5tZWFucy5zdWIgPC0gYmFuZGl0VGFzay5SVC5kYXRhICU+JQogICAgZ3JvdXBfYnkodm9jLCBhZ2VfZ3JvdXAsIHN1YklEKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuU3ViUlQgPSBtZWFuKGFnZW5jeVJUKSwKICAgICAgICAgICAgICBtZWFuU3ViTG9nUlQgPSBtZWFuKGFnZW5jeUxvZ1JUKSkKCiNjb21wdXRlIG1lYW5zIGFuZCBTRHMKYWdlbmN5UlQubWVhbnMgPC0gYWdlbmN5UlQubWVhbnMuc3ViICAlPiUKICAgIGdyb3VwX2J5KHZvYywgYWdlX2dyb3VwKSAlPiUKICAgIHN1bW1hcml6ZShtZWFuUlQgPSBtZWFuKG1lYW5TdWJSVCksCiAgICAgICAgICAgICAgbWVhbkxvZ1JUID0gbWVhbihtZWFuU3ViTG9nUlQpLAogICAgICAgICAgICAgIHNlUlQgPSBzZChtZWFuU3ViUlQpLyBzcXJ0KG4oKSksCiAgICAgICAgICAgICAgc2VMb2dSVCA9IHNkKG1lYW5TdWJMb2dSVCkvIHNxcnQobigpKSkKCmFnZW5jeVJULlZvQy5wbG90IDwtIGdncGxvdChhZ2VuY3lSVC5tZWFucywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZXMoeCA9IHZvYywgeSA9IG1lYW5SVCkpICsKICAgIGZhY2V0X3dyYXAofmFnZV9ncm91cCkgKwogICAgZ2VvbV9wb2ludChzaXplID0gMywgYWVzKGNvbG9yPSBhZ2VfZ3JvdXApKSArCiAgICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVhblJUIC0gc2VSVCwgeW1heCA9IG1lYW5SVCArIHNlUlQsIGNvbG9yID0gYWdlX2dyb3VwKSwgd2lkdGggPSAuMSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSkgKwogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoY29sb3IxLCBjb2xvcjIsIGNvbG9yMykpICsKICAgIHhsYWIoIlZhbHVlIG9mIENob2ljZSIpICsKICAgICB5bGFiKCJNZWFuIEFnZW5jeSBEZWNpc2lvbiBUaW1lIChzKSIpICsKICAgIHZvY190aGVtZSgpICsKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYWdlbmN5UlQuVm9DLnBsb3QKYGBgCgojIENob2ljZSBwcmVmZXJlbmNlIHRhc2sgCiMjIENob2ljZSBwcmVmZXJlbmNlIHRhc2s6IHN1bW1hcnkgc3RhdHMKYGBge3IgcmV3YXJkIHNlbnNlIHN1bW1hcnkgc3RhdHN9CgojIFJlYWQgaW4gZGF0YQpyZXdhcmRTZW5zZSA8LSByZWFkX2NzdignZGF0YS9wcm9jZXNzZWQvcmV3YXJkX3NlbnNpdGl2aXR5X3Rhc2suY3N2JykgCgojY29tYmluZSB3aXRoIGFnZQpyZXdhcmRTZW5zZSA8LSBmdWxsX2pvaW4ocmV3YXJkU2Vuc2UsIHN1Yl9pbmZvLCBieSA9IGMoInN1YklEIikpCgojIHN1bW1hcnkgc3RhdHMgZm9yIGFjY3VyYWN5Cm92ZXJhbGxBY2MgPC0gcmV3YXJkU2Vuc2UgJT4lIAogICAgZ3JvdXBfYnkoc3ViSUQpICU+JSAKICAgIGZpbHRlcihhY2N1cmFjeSE9MCkgJT4lIAogICAgc3VtbWFyaXplKG09bWVhbihjb3JyZWN0LCBuYS5ybT1UKSkgJT4lIAogICAgdW5ncm91cCgpICU+JSAKICAgIHN1bW1hcml6ZShtZWFuQWNjdXJhY3kgPSBtZWFuKG0pLCBzdGRldiA9IHNkKG0pKQpvdmVyYWxsQWNjCgojIG1lYW4gPSA3Ni45JQojIHN0ZGV2ID0gMTUuMyUKYGBgCgojIyBNb2RlbDogQ2hvaWNlIHByZWZlcmVuY2UgdGFzayBhY2N1cmFjeQpgYGB7ciBiYW5kaXQgY2hvaWNlcyBhY3Jvc3MgYnkgYWdlIGluIHBvc3QtdGFzayBhc3Nlc3NtZW50fQoKIyBmaXJzdCwgZmlsdGVyIGRhdGEgYW5kIHJlc2NhbGUgdmFyaWFibGVzCnJld2FyZFNlbnNlLmZpbHRlcmVkIDwtIHJld2FyZFNlbnNlICU+JSAgCiAgICBmaWx0ZXIoYWNjdXJhY3khPTApCgojIHJlc2NhbGUgdmFyaWFibGVzIG9mIGFnZSBhbmQgdGhlIHRydWUgcHJvYmFiaWxpdHkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gZGlzcGxheWVkIGJhbmRpdHMgCnJld2FyZFNlbnNlLmZpbHRlcmVkJHpBZ2UgPC0gc2NhbGUocmV3YXJkU2Vuc2UuZmlsdGVyZWQkYWdlKQpyZXdhcmRTZW5zZS5maWx0ZXJlZCR6RGlmZjwtIHNjYWxlKHJld2FyZFNlbnNlLmZpbHRlcmVkJGRpZmYpCgojIHJ1biBtb2RlbApyZXdhcmRTZW5zZS5taXhlZCA8LSBtaXhlZChjb3JyZWN0fnpEaWZmKnpBZ2UgKyAoekRpZmZ8c3ViSUQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT0gcmV3YXJkU2Vuc2UuZmlsdGVyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSAiTFJUIikKcmV3YXJkU2Vuc2UubWl4ZWQgCmBgYAoKCiMgRXhwbGljaXQgcmV3YXJkIGtub3dsZWRnZSB0YXNrIAojIyBFeHBsaWNpdCByZXdhcmQga25vd2xlZGdlIHRhc2s6IHN1bW1hcnkgc3RhdHMKYGBge3IgZXhwbGljaXQga25vd2xlZGdlIHRhc2t9CgojIFJlYWQgaW4gZGF0YQpleHBsaWNpdEtub3cgPC0gcmVhZF9jc3YoJ2RhdGEvcHJvY2Vzc2VkL2V4cGxpY2l0X2tub3dsZWRnZV90YXNrLmNzdicpIAoKI2NvbWJpbmUgd2l0aCBhZ2UKZXhwbGljaXRLbm93IDwtIGZ1bGxfam9pbihleHBsaWNpdEtub3csIHN1Yl9pbmZvLCBieSA9IGMoInN1YklEIikpCgpleHBsaWNpdEtub3cgJT4lIAogIGdyb3VwX2J5KHN1YklELCBhZ2UpICU+JSAKICBzdW1tYXJpemUobSA9IG1lYW4oZXJyb3IpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICBzdW1tYXJpemUobWVhbkVyciA9IG1lYW4obSwgbmEucm09VCksIHNkID0gc2QobSxuYS5ybSA9IFQpKQpgYGAKCiMjIE1vZGVsOiBFeHBsaWNpdCByZXdhcmQga25vd2xlZGdlIGJ5IGFnZSBhbmQgdHJ1ZSBwcm9iYWJpbGl0aWVzCmBgYHtyIGV4cGxpY2l0IGtub3dsZWRnZSBtb2RlbH0KIyBwcmVkaWN0IHRyaWFsLWxldmVsIGVycm9yIGZyb20gdHJ1ZSBwcm9iYWJpbGl0eSBhbmQgYWdlCgojcmUtc2NhbGUgYWdlIGFuZCB6VHJ1ZVByb2IKZXhwbGljaXRLbm93LmZpbHRlcmVkIDwtIGV4cGxpY2l0S25vdyAlPiUKICAgIHNlbGVjdChzdWJJRCwgYWdlLCB0cnVlUHJvYiwgcmVzcG9uc2UsIGVycm9yKSAlPiUKICAgIGRyb3BfbmEoKQoKZXhwbGljaXRLbm93LmZpbHRlcmVkJHpBZ2UgPC0gc2NhbGUoZXhwbGljaXRLbm93LmZpbHRlcmVkJGFnZSkKZXhwbGljaXRLbm93LmZpbHRlcmVkJHpUcnVlUHJvYiA8LSBzY2FsZShleHBsaWNpdEtub3cuZmlsdGVyZWQkdHJ1ZVByb2IpCgojIHJ1biBtb2RlbApleHBsaWNpdEtub3dfZXJyb3JieVRydWVQcm9iQWdlLm1peGVkIDwtIG1peGVkKGVycm9yIH4gelRydWVQcm9iKnpBZ2UgKyAoMXxzdWJJRCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBleHBsaWNpdEtub3cuZmlsdGVyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlMiKSAKZXhwbGljaXRLbm93X2Vycm9yYnlUcnVlUHJvYkFnZS5taXhlZApgYGAKCiMjIFBsb3Q6IEV4cGxpY2l0IHJld2FyZCBrbm93bGVkZ2UKYGBge3IgcGxvdCBleHBsaWNpdCBrbm93bGVkZ2V9CiMgcGxvdCByZXNwb25zZSBieSBiYW5kaXQKZXhwbGljaXRLbm93ICU+JSAKICAgIGdncGxvdCguLCBhZXMoeD1mYWN0b3IodHJ1ZVByb2IpLCB5PXJlc3BvbnNlLCBmaWxsPWFnZV9ncm91cCkpICsKICAgIGdlb21fYm94cGxvdCgpICsKICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoY29sb3IxLCBjb2xvcjIsIGNvbG9yMyksIG5hbWUgPSAiQWdlIEdyb3VwIikgKwogICAgeWxhYigiUmVwb3J0ZWQgUmV3YXJkIFByb2JhYmlsaXR5IikgKwogICAgeGxhYigiVHJ1ZSBSZXdhcmQgUHJvYmFiaWxpdHkiKSArCiAgICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscyA9IGMoIjEwJSIsICIzMCUiLCAiNTAlIiwgIjcwJSIsICI5MCUiKSkgKwogICAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IGMoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSksIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCIxMCUiLCAiMjAlIiwgIjMwJSIsICI0MCUiLCAiNTAlIiwgIjYwJSIsICI3MCUiLCAiODAlIiwgIjkwJSIpKSArCiAgICB2b2NfdGhlbWUoKQpgYGAK